package com.neteast.androidclient.newscenter.domain;

import java.io.Closeable;
import java.io.IOException;
import java.io.Serializable;

import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
/**
 * 所有通知共用的实体类。
 * 	在不同类型的通知里，某些字段是不需要的。
 * 
 * @author tiangh
 *
 */
public class Information implements Serializable,Closeable,Comparable<Information>{
	private static final long serialVersionUID = 1L;
	
	/** 消息id，消息的唯一标志*/
	public Long infoId;
	
	/** 消息类型，可以为系统广播，应用通知，或者互动消息*/
	public int infoTypeId;
	
	/** 应用id，应用程序的唯一标识*/
	public int appId;
	
	/** 应用程序名*/
	public String appName;
	
	/** 用户id，用户的唯一标志。系统广播，应用通知为空*/
	public Long userId;
	
	/** 用户名。，系统广播，应用通知为空*/
	public String userName;
	
	/** 互动信息的类型，比如（电影、音乐、酷图、应用）*/
	public int interactiveType;
	
	/** 不同的互动信息类型与之对应的消息语句 */
	public String ineractiveTypeContent;
	
	/** 互动消息类型或应用通知的缩略图。系统消息为空 */
	public Drawable infoThumbnail;
	
	/**	应用通知的缩略图的本地存储文件地址,数据库存储使用*/
	public String infoThumbnailPath;
	
	/** 消息的发送时间  */
	public Long sendTime;
	
	/**系统广播中包含的图片的Url链接*/
	public String picUrl;
	
	/**消息的文本内容*/
	public String textContent;
	
	/**点击消息后跳转的Url*/
	public String goURL;
	
	/** 消息的权重，普通消息为1，带图片的系统通知为2 */
	public int weight=1;
	
	/** 带图片的系统消息所带的图*/
	public Bitmap bitmap;
		
	/** 该条消息是否被显示过*/
	public boolean isDisplayed=false;
	
	@Override
	public String toString() {
		return "Information [infoId=" + infoId + ", infoTypeId=" + infoTypeId
				+ ", appId=" + appId + ", appName=" + appName + ", userId="
				+ userId + ", userName=" + userName + ", interactiveType="
				+ interactiveType + ", ineractiveTypeContent="
				+ ineractiveTypeContent + ", infoThumbnail=" + infoThumbnail
				+ ", infoThumbnailPath=" + infoThumbnailPath + ", sendTime="
				+ sendTime + ", picUrl=" + picUrl + ", textContent="
				+ textContent + ", goURL=" + goURL + ", weight=" + weight + "]";
	}


	@Override
	public void close() throws IOException {
		bitmap.recycle();
		bitmap=null;
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((infoId == null) ? 0 : infoId.hashCode());
		return result;
	}


	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Information other = (Information) obj;
		if (infoId == null) {
			if (other.infoId != null)
				return false;
		} else if (!infoId.equals(other.infoId))
			return false;
		return true;
	}


	@Override
	public int compareTo(Information another) {
		return Long.valueOf(another.sendTime).compareTo(this.sendTime);
	}
	
}
